AWSのAPI操作を複数アカウントに対して行うGemをリリースしました
こんにちは。望月です。
本日Gemをひとつリリースしたので、その紹介をかねたポストです。
概要
credential_traverserというGemをリリースしました。
- credential_traverser | RubyGems.org | your community gem host
- Github : masaomoc/credential_traverser
このGemを使うと、AWSの特定のAPI操作を~/.aws/credentialに記載された全てのプロファイルに対して実施します。用途としては、例えば複数のAWSアカウントに対して「メンテナンス予告が来ているかどうかチェックしたい」や、「調子が悪いインスタンスがいないかチェックしたい」のように横断的にAPIリクエストを実行したい時などが考えられます。
利用
上述しましたが、このGemでは~/.aws/credentialsファイルを利用します。このファイルはSharedCredentialFileと呼ばれており、各種SDKで共通利用するためのクレデンシャル情報をINI形式で記載します。詳しくは以下のエントリを参照ください。 : AWSのクレデンシャルを記載するファイルの種類 | Developers.IO
たとえば以下のような内容のSharedCredentialFileを容易します。
[default] aws_access_key_id = AKIAxxxxxxxxx aws_secret_access_key = yyyyyyyyyyyyyyyy [other_profile] aws_access_key_id = AKIAiiiiiiiiiiiii aws_secret_access_key = jjjjjjjjjjjjjjjjj [another_profile] aws_access_key_id = AKIAmmmmmmmmmmmm aws_secret_access_key = nnnnnnnnnnnnnn
全部で3つのプロファイルが記載されています。そして動作確認用に以下のRubyコードを準備します。
require 'aws-sdk-v1' require 'credential_traverser' CredentialTraverser.traverse do |profile| ec2 = AWS::EC2.new puts "#{profile} : #{ec2.instances.count}" end
EC2インスタンスの数を数えるだけの簡単なスクリプトです。SharedCredentialFileに記載された全てのクレデンシャル情報に対して、ブロックとして渡された5,6行目が実行されます。
実行結果は以下のようになります。
default : 5 other_profile : 2 another_profile : 0
全てのプロファイルを利用して、インスタンス数を数えてくれました。
まとめ
弊社では一つのプロジェクトに対して一つのAWSアカウントを作成するやり方を推奨しています。例えば開発環境と本番環境のAWSアカウントを分割することで、環境の隔離性が保たれ、様々な事故の可能性が減るからです。ただ、AWSアカウントの数が増えれば増えるほど、AWSアカウントとアカウント内のサービスの状況を把握し、きっちりと運用することが困難になります。そんな時のために、アカウントが増えても管理コストが増えないよう、様々な自動化の仕組みがあると便利ですよね。ぜひご利用下さい。PullRequestもお待ちしております。